#ifndef __PWMI_Config_H
#define __PWMI_Config_H

#include "stm32f10x.h"                  // 包含STM32F10x系列标准外设库头文件
                                        // 提供GPIO、TIM等外设的寄存器定义、结构体及函数声明

/* 外设引脚定义 ------------------------------------------------------------*/
// PWMI输入引脚相关宏定义，集中管理硬件资源，便于后期修改
#define PWMI_CLK   RCC_APB2Periph_GPIOA  // PWMI输入引脚所在GPIO端口的时钟使能位
                                        // 此处为GPIOA的时钟控制位，需通过RCC函数使能
#define PWMI_PORT  GPIOA                 // PWMI输入端口（GPIOA）
#define PWMI_PIN   GPIO_Pin_6            // PWMI输入引脚（PA6）
                                        // 硬件关联：PA6是TIM3_CH1的默认复用引脚，可直接接收PWM信号

/* 定时器宏定义 ------------------------------------------------------------*/
// 定时器相关宏定义，指定用于PWMI模式的定时器资源
#define TIMx          TIM3                  // 选择TIM3作为PWMI模式的定时器
                                        // 理由：TIM3_CH1与PA6引脚默认复用，无需额外重映射
#define TIM_CLK       RCC_APB1Periph_TIM3   // TIM3的时钟使能位（挂载在APB1总线）

/**
  * @brief  配置TIM3为PWMI模式，实现PWM信号频率和占空比的同步测量
  * @param  无
  * @retval 无
  * @note   初始化流程：
  *         1. 使能GPIOA时钟，配置PA6为上拉输入模式（适应PWM信号特性）
  *         2. 使能TIM3时钟，配置内部时钟源（72MHz）
  *         3. 配置时基单元：预分频器71（计数频率1MHz），自动重载值65535（最大计数范围）
  *         4. 配置PWMI模式：
  *            - 通道1（主通道）：上升沿捕获，测量PWM周期（频率）
  *            - 通道2（互补通道）：下降沿捕获，测量高电平时间（占空比）
  *         5. 设置触发源为通道1的滤波后信号，从模式为复位模式（上升沿清零计数器）
  *         6. 启动TIM3计数器，开始捕获PWM信号
  *         硬件要求：输入PWM信号需连接到PA6引脚，电平范围0~3.3V
  */
void PWMI_Config(void);

/**
  * @brief  获取输入PWM信号的频率值
  * @param  无
  * @retval 频率值（单位：Hz）
  * @note   测量原理：
  *         - 通道1捕获两个相邻上升沿的计数值（CCR1），即PWM周期的计数次数
  *         - 计算公式：频率 = 1MHz / (CCR1 + 1)（+1是因为计数从0开始）
  *         测量范围：
  *         - 最小频率：~15Hz（对应CCR1=65535，周期65536μs）
  *         - 最大频率：~1MHz（对应CCR1=0，周期1μs）
  *         依赖条件：
  *         - 必须先调用PWMI_Config()完成初始化
  *         - 输入信号频率需在有效范围内，否则返回值异常（如低于15Hz会溢出）
  */
u32 PWMI_GetFreq(void);

/**
  * @brief  获取输入PWM信号的占空比
  * @param  无
  * @retval 占空比（单位：%，范围0~100）
  * @note   测量原理：
  *         - 通道2捕获上升沿到下降沿的计数值（CCR2），即高电平时间的计数次数
  *         - 计算公式：占空比 = [(CCR2 + 1) / (CCR1 + 1)] × 100%
  *         精度特性：
  *         - 占空比精度与PWM周期正相关，周期越大精度越高（如1000μs周期时精度0.1%）
  *         - 当CCR1=0时（频率1MHz），返回值可能异常（需避免输入超范围信号）
  *         依赖条件：
  *         - 必须先调用PWMI_Config()完成初始化
  *         - 需确保输入信号为标准PWM波形（有明确上升沿和下降沿）
  */
u32 PWMI_GetDuty(void); 

#endif /* __PWMI_Config_H */  //
